﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Import.Controllers
{
    public class ImportController : Controller
    {
        //
        // GET: /Import/

        public ActionResult Index()
        {
            return View();
        }
        public ActionResult Import()
        {
            return View();
        }

        //public ActionResult Upload(string type, string cb)
        //{
        //    string fileId = string.Empty, message = string.Empty;
        //    try
        //    {
        //        if (Request.Files.Count == 0) { throw new NotSupportedException("未上传文件！"); }
        //        if (Request.Files.Count > 1) { throw new NotSupportedException("上传的文件数量太多！"); }
        //        var file = Request.Files[0];
        //        var fileName = file.FileName;
        //        var fileExt = Path.GetExtension(fileName);
        //        if (!".xls;.xlsx".Split(";".ToCharArray()).ToList().Contains(fileExt, StringComparer.OrdinalIgnoreCase)) { throw new NotSupportedException("上传的文件类型不正确！"); }

        //        fileId = "Import_" + DateTime.Now.ToString("yyyyMMddHHmmssfffff");
        //        fileName = fileId + fileExt;
        //        var filePath = Server.MapPath("~/Excels/") + fileName;
        //        file.SaveAs(filePath);
        //        var userName = FormsAuth.GetForm().Account;
        //        var userId = FormsAuth.GetForm().ID;
        //        var shopId = FormsAuth.GetForm().ShopId;
        //        var unionId = FormsAuth.GetForm().UnionId;
        //        var user = UserService.Get(userId);
        //        var shop = ShopService.Get(shopId);
        //        var time = DateTime.Now;

        //        switch (type)
        //        {
        //            case "goods":
        //                {
        //                    var storages = StorageService.GetStorage(userId, shopId).ToDictionary(x => x.StorageName, y => y.ID, StringComparer.OrdinalIgnoreCase);
        //                    var categorys = GoodsCategoryService.Get(userId, shopId);

        //                    var list = ImportService.FromExcel<ImportService.GoodsModel>(filePath, true, 1, 10000, ImportService.ConvertGoods, (items, item) =>
        //                    {
        //                        var flag = false;
        //                        var msg = "";
        //                        if (item.MatchCarModel != null)
        //                        {
        //                            if (item.MatchCarModel.Length > 400)
        //                            {
        //                                msg += "适用车型过长，要求长度为400字符，现长度为:" + item.GoodsCode.Length + "字符";
        //                            }
        //                        }

        //                        if (string.IsNullOrWhiteSpace(item.GoodsCode)) { msg += "商品编码为空。"; }
        //                        else if (item.GoodsCode.Length > 50)
        //                        {
        //                            msg += "商品编码过长，要求长度为50字符，现长度为:" + item.GoodsCode.Length + "字符";
        //                        }
        //                        else
        //                        {
        //                            if (items.Any(x => x.GoodsCode == item.GoodsCode)) { msg += "商品编码在Excel中重复。"; }
        //                            if (GoodsService.Get(unionId, shopId, item.GoodsCode) != null) { msg += "商品编码在系统中重复。"; }
        //                        }
        //                        if (string.IsNullOrWhiteSpace(item.GoodsName)) { msg += "商品名称为空。"; }
        //                        else
        //                        {
        //                            if (item.GoodsName.Length > 100) { msg += "商品名称过长，要求长度为100字符，现长度为:" + item.GoodsName.Length + "字符"; }
        //                        }
        //                        if (!item.InitInventory.HasValue) { msg += "期初库存为空。"; }
        //                        if (!item.InitCostPrice.HasValue) { msg += "成本价为空。"; }
        //                        if (string.IsNullOrWhiteSpace(item.StorageName)) { msg += "仓库为空。"; }
        //                        else
        //                        {
        //                            if (!storages.ContainsKey(item.StorageName)) { msg += "仓库不存在。"; } else { item.StorageId = storages[item.StorageName]; }
        //                        }
        //                        item.UnionID = unionId;
        //                        item.ShopID = shopId;
        //                        item.CreateTime = time;
        //                        item.OperatorName = userName;
        //                        item.IsDeleted = false;
        //                        item.IsError = true;
        //                        if (!string.IsNullOrEmpty(msg))
        //                        {
        //                            msg += " ≧ ﹏ ≦ ";
        //                            flag = true;
        //                        }
        //                        item.IsError = flag;
        //                        item.ErrorMsg = msg;
        //                        if (!string.IsNullOrWhiteSpace(item.CategoryName))
        //                        {
        //                            var category = categorys.Where(x => x.Name.Equals(item.CategoryName)).FirstOrDefault();
        //                            if (category != null) { item.CategoryID = category.ID; item.CategoryCode = category.Code; }
        //                        }
        //                    });

        //                    FormsAuth.SetTokenData("Import-" + fileId, list);
        //                    FormsAuth.SetTokenData("Import-" + fileId + "-Type", type);
        //                }
        //                break;
        //            case "customer":
        //                {
        //                    var list = ImportService.FromExcel<ImportService.CustomerCarModel>(filePath, true, 1, 10000, ImportService.ConvertCustomerCar, (items, item) =>
        //                    {
        //                        var flag = false;
        //                        var msg = "";
        //                        if (string.IsNullOrWhiteSpace(item.Name)) { msg += "客户名称为空。"; }
        //                        if (string.IsNullOrWhiteSpace(item.MobilePhone)) { msg += "联系手机为空。"; }
        //                        if (string.IsNullOrWhiteSpace(item.PlateNumber)) { msg += "车牌号为空。"; }
        //                        else
        //                        {
        //                            if (items.Any(x => x.PlateNumber == item.PlateNumber)) { msg += "在Excel中重复。"; }
        //                        }
        //                        if (CarService.GetCar(unionId, shopId, item.PlateNumber) != null) { msg += "车牌号在系统中重复。"; }
        //                        if (!string.IsNullOrEmpty(msg))
        //                        {
        //                            msg += " ≧ ﹏ ≦ ";
        //                            flag = true;
        //                        }
        //                        item.Shop = shop;
        //                        item.User = user;
        //                        item.CreateTime = time;
        //                        item.IsError = flag;
        //                        item.ErrorMsg = msg;
        //                    });
        //                    FormsAuth.SetTokenData("Import-" + fileId, list);
        //                    FormsAuth.SetTokenData("Import-" + fileId + "-Type", type);
        //                }
        //                break;
        //            case "item":
        //                {
        //                    var list = ImportService.FromExcel<ImportService.ItemModel>(filePath, true, 1, 10000, ImportService.ConvertItem, (items, item) =>
        //                    {
        //                        var flag = false;
        //                        var msg = "";
        //                        if (string.IsNullOrWhiteSpace(item.ItemCode)) { msg += "项目编码为空。"; }
        //                        if (string.IsNullOrWhiteSpace(item.ItemName)) { msg += "项目名称为空。"; }
        //                        if (string.IsNullOrWhiteSpace(item.CategoryName)) { msg += "项目分类为空。"; }
        //                        else
        //                        {
        //                            if (items.Any(x => x.ItemCode == item.ItemCode)) { msg += "项目编码在Excel中重复。"; }
        //                            else
        //                            {
        //                                if (ItemService.Get(shopId, item.ItemCode) != null) { msg += "项目编码在系统中重复。"; }
        //                            }
        //                        }
        //                        if (!string.IsNullOrEmpty(msg))
        //                        {
        //                            msg += " ≧ ﹏ ≦ ";
        //                            flag = true;
        //                        }
        //                        item.CreateTime = time;
        //                        item.IsDeleted = false;
        //                        item.ShopID = shopId;
        //                        item.UnionID = unionId;
        //                        item.IsError = flag;
        //                        item.ErrorMsg = msg;
        //                    });
        //                    FormsAuth.SetTokenData("Import-" + fileId, list);
        //                    FormsAuth.SetTokenData("Import-" + fileId + "-Type", type);
        //                }
        //                break;
        //            case "supplier":
        //                {
        //                    var list = ImportService.FromExcel<ImportService.SupplierModel>(filePath, true, 1, 10000, ImportService.ConvertSupplier, (items, item) =>
        //                    {
        //                        var flag = false;
        //                        var msg = "";
        //                        if (string.IsNullOrWhiteSpace(item.SupplierName)) { msg += "供应商名称为空。"; }
        //                        else
        //                        {
        //                            if (items.Any(x => x.SupplierName == item.SupplierName)) { msg += "供应商名称Excel中重复。"; }
        //                            if (SupplierService.Get(shopId, item.SupplierName) != null) { msg += "供应商名称在系统中重复。"; }
        //                        }
        //                        if (!string.IsNullOrEmpty(msg))
        //                        {
        //                            msg += " ≧ ﹏ ≦ ";
        //                            flag = true;
        //                        }
        //                        item.UnionID = unionId;
        //                        item.ShopID = shopId;
        //                        item.CreateTime = time;
        //                        item.IsError = flag;
        //                        item.ErrorMsg = msg;
        //                    });
        //                    FormsAuth.SetTokenData("Import-" + fileId, list);
        //                    FormsAuth.SetTokenData("Import-" + fileId + "-Type", type);
        //                }
        //                break;
        //            case "billextsheet": //第三方维修单
        //                {
        //                    var list = ImportService.FromExcel<ImportService.BillExtSheetModel>(filePath, true, 1, 10000, ImportService.ConvertBillExtSheet, (items, item) =>
        //                    {
        //                        var flag = false;
        //                        var msg = "";
        //                        if (string.IsNullOrWhiteSpace(item.BillCode)) { msg += "单号为空。"; }

        //                        if (string.IsNullOrEmpty(msg) == false)
        //                        {
        //                            flag = true;
        //                        }
        //                        item.UnionID = unionId;
        //                        item.ShopID = shopId;
        //                        item.CreateTime = time;
        //                        item.IsError = flag;
        //                        item.ErrorMsg = msg;
        //                    });
        //                    FormsAuth.SetTokenData("Import-" + fileId, list);
        //                    FormsAuth.SetTokenData("Import-" + fileId + "-Type", type);
        //                }
        //                break;
        //            default:
        //                System.IO.File.Delete(filePath);
        //                throw new NotSupportedException("不支持的业务类型！");
        //        }
        //        System.IO.File.Delete(filePath);
        //    }
        //    catch (Exception e)
        //    {
        //        message = e.Message + "</br>" + e.StackTrace;
        //    }
        //    return Content(string.Format("<script>window.parent.{0}({1});</script>", cb, new { fileId = fileId, message = message }.ToJson()));
        //}

        //[Attributes.Ajax]
        //public ActionResult Query(string fileId, int pageIndex = 1, int pageSize = 50)
        //{
        //    var userId = FormsAuth.GetForm().ID;
        //    var type = (FormsAuth.GetTokenData("Import-" + fileId + "-Type") as string ?? string.Empty);
        //    var listObj = FormsAuth.GetTokenData("Import-" + fileId);
        //    object result = null;
        //    switch (type)
        //    {
        //        case "goods":
        //            {
        //                var list = (List<ImportService.GoodsModel>)listObj;
        //                pageSize = list.Count;

        //                result = new
        //                {
        //                    Items = list.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(),
        //                    CurrentPage = pageIndex,
        //                    ItemsPerPage = pageSize,
        //                    TotalPages = Convert.ToInt32(Math.Ceiling(1.0 * list.Count / (pageSize == 0 ? 1 : pageSize))),
        //                    TotalItems = list.Count
        //                };
        //            }
        //            break;
        //        case "customer":
        //            {
        //                var list = (List<ImportService.CustomerCarModel>)listObj;
        //                pageSize = list.Count;
        //                result = new
        //                {
        //                    Items = list.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(),
        //                    CurrentPage = pageIndex,
        //                    ItemsPerPage = pageSize,
        //                    TotalPages = Convert.ToInt32(Math.Ceiling(1.0 * list.Count / (pageSize == 0 ? 1 : pageSize))),
        //                    TotalItems = list.Count
        //                };
        //            }
        //            break;
        //        case "item":
        //            {
        //                var list = (List<ImportService.ItemModel>)listObj;
        //                pageSize = list.Count;
        //                result = new
        //                {
        //                    Items = list.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(),
        //                    CurrentPage = pageIndex,
        //                    ItemsPerPage = pageSize,
        //                    TotalPages = Convert.ToInt32(Math.Ceiling(1.0 * list.Count / (pageSize == 0 ? 1 : pageSize))),
        //                    TotalItems = list.Count
        //                };
        //            }
        //            break;
        //        case "supplier":
        //            {
        //                var list = (List<ImportService.SupplierModel>)listObj;
        //                pageSize = list.Count;
        //                result = new
        //                {
        //                    Items = list.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(),
        //                    CurrentPage = pageIndex,
        //                    ItemsPerPage = pageSize,
        //                    TotalPages = Convert.ToInt32(Math.Ceiling(1.0 * list.Count / (pageSize == 0 ? 1 : pageSize))),
        //                    TotalItems = list.Count
        //                };
        //            }
        //            break;
        //        //第三方维修单
        //        case "billextsheet":
        //            {
        //                var list = (List<ImportService.BillExtSheetModel>)listObj;
        //                pageSize = list.Count;
        //                result = new
        //                {
        //                    Items = list.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(),
        //                    CurrentPage = pageIndex,
        //                    ItemsPerPage = pageSize,
        //                    TotalPages = Convert.ToInt32(Math.Ceiling(1.0 * list.Count / (pageSize == 0 ? 1 : pageSize))),
        //                    TotalItems = list.Count
        //                };
        //            }
        //            break;
        //    }
        //    return Json(result);
        //}

        //[Attributes.Ajax]
        //public ActionResult Delete(string fileId, Guid id)
        //{
        //    var type = (FormsAuth.GetTokenData("Import-" + fileId + "-Type") as string ?? string.Empty);
        //    var listObj = FormsAuth.GetTokenData("Import-" + fileId);
        //    switch (type)
        //    {
        //        case "goods":
        //            {
        //                var list = (List<ImportService.GoodsModel>)listObj;
        //                var item = list.Where(x => x.ID == id).Single();
        //                list.Remove(item);
        //                FormsAuth.SetTokenData("Import-" + fileId, list);
        //                //UserContext.SetTokenData("Import-" + fileId, list);
        //            }
        //            break;
        //        case "customer":
        //            {
        //                var list = (List<ImportService.CustomerCarModel>)listObj;
        //                var item = list.Where(x => x.Id == id).Single();
        //                list.Remove(item);
        //                FormsAuth.SetTokenData("Import-" + fileId, list);
        //            }
        //            break;
        //        case "item":
        //            {
        //                var list = (List<ImportService.ItemModel>)listObj;
        //                var item = list.Where(x => x.ID == id).Single();
        //                list.Remove(item);
        //                FormsAuth.SetTokenData("Import-" + fileId, list);

        //                // UserContext.SetTokenData("Import-" + fileId, list);
        //            }
        //            break;
        //        case "supplier":
        //            {
        //                var list = (List<ImportService.SupplierModel>)listObj;
        //                var item = list.Where(x => x.ID == id).Single();
        //                list.Remove(item);
        //                FormsAuth.SetTokenData("Import-" + fileId, list);

        //                //  UserContext.SetTokenData("Import-" + fileId, list);
        //            }
        //            break;

        //        //第三方维修单
        //        case "billextsheet":
        //            {
        //                var list = (List<ImportService.BillExtSheetModel>)listObj;
        //                var item = list.Where(x => x.ID == id).Single();
        //                list.Remove(item);
        //                FormsAuth.SetTokenData("Import-" + fileId, list);

        //                //  UserContext.SetTokenData("Import-" + fileId, list);
        //            }
        //            break;
        //    }
        //    return Json(null);
        //}

        //[Attributes.Ajax]
        //public ActionResult Save(string fileId)
        //{

        //    var type = (FormsAuth.GetTokenData("Import-" + fileId + "-Type") as string ?? string.Empty);
        //    var listObj = FormsAuth.GetTokenData("Import-" + fileId);

        //    var userName = FormsAuth.GetForm().Account;
        //    var userId = FormsAuth.GetForm().ID;
        //    var shopId = FormsAuth.GetForm().ShopId;
        //    var unionId = FormsAuth.GetForm().UnionId;
        //    var shop = ShopService.Get(shopId);
        //    var user = UserService.Get(userId);
        //    var time = DateTime.Now;



        //    switch (type)
        //    {
        //        case "goods":
        //            {
        //                var list = (List<ImportService.GoodsModel>)listObj;
        //                ImportService.Save(list, x =>
        //                {
        //                    x.UnionID = unionId;
        //                    x.ShopID = shopId;
        //                    x.CreateTime = time;
        //                    x.OperatorName = userName;
        //                    x.IsDeleted = false;
        //                });
        //                FormsAuth.ActionLogAdd(ActionLog.资料导入_商品_导入);
        //            }
        //            break;
        //        case "customer":
        //            {
        //                var list = (List<ImportService.CustomerCarModel>)listObj;
        //                ImportService.Save(list, x =>
        //                {
        //                    x.Shop = shop;
        //                    x.User = user;
        //                });
        //                FormsAuth.ActionLogAdd(ActionLog.资料导入_商品_导入);

        //            }
        //            break;
        //        case "item":
        //            {
        //                var list = (List<ImportService.ItemModel>)listObj;
        //                ImportService.Save(list, x =>
        //                {
        //                    x.UnionID = unionId;
        //                    x.ShopID = shopId;
        //                    x.CreateTime = time;
        //                    x.IsDeleted = false;
        //                });
        //                FormsAuth.ActionLogAdd(ActionLog.资料导入_商品_导入);

        //            }
        //            break;
        //        case "supplier":
        //            {
        //                var list = (List<ImportService.SupplierModel>)listObj;
        //                ImportService.Save(list, x =>
        //                {
        //                    x.UnionID = unionId;
        //                    x.ShopID = shopId;
        //                    x.CreateTime = time;
        //                });
        //                FormsAuth.ActionLogAdd(ActionLog.资料导入_商品_导入);

        //            }
        //            break;
        //        //第三方维修单
        //        case "billextsheet":
        //            {
        //                var list = (List<ImportService.BillExtSheetModel>)listObj;
        //                ImportService.Save(list, x =>
        //                {
        //                    x.UnionID = unionId;
        //                    x.ShopID = shopId;
        //                    x.CreateTime = time;
        //                });
        //            }
        //            break;

        //    }
        //    FormsAuth.RemoveTokenData("Import-" + fileId + "-Type");
        //    FormsAuth.RemoveTokenData("Import-" + fileId);
        //    return Json(null);
        //}

        //#region 导入excel

        //[HttpPost]
        //public ActionResult Uploadtest(FormCollection form, Guid shopid, Guid unionid, Guid storageid)
        //{
        //    if (Request.Files.Count == 0)
        //    {
        //        return View();
        //    }
        //    List<Dictionary<string, object>> pdList = new List<Dictionary<string, object>>();
        //    List<Dictionary<string, object>> dic = new List<Dictionary<string, object>>();
        //    Dictionary<string, object> pdInfo = new Dictionary<string, object>();
        //    int SumInt = 0;
        //    string ErrorStr = string.Empty;

        //    HttpPostedFileBase httpFile = Request.Files[0];
        //    string fileName = DateTime.Now.ToString("yyyyMMddHHmmssffffff") + ".xls";
        //    httpFile.SaveAs(Server.MapPath("~/") + "\\Excels\\" + fileName);

        //    DataSet ds = new DataSet();

        //    var path = "\\Excels\\" + fileName;
        //    var abspath = Server.MapPath(path);
        //    try
        //    {
        //        ds.Tables.Add(Exclehelp.LoadByRowNum(abspath, 1));
        //        SumInt = ds.Tables[0].Rows.Count;
        //        decimal price = 0;
        //        int qty = 1;
        //        string Msg = "";
        //        bool flag = true;
        //        for (int i = 0; i < SumInt; i++)
        //        {
        //            var row = ds.Tables[0].Rows[i];
        //            pdInfo = new Dictionary<string, object>();
        //            Decimal.TryParse(row[2].ToString(), out price);
        //            int.TryParse(row[2].ToString(), out qty);

        //            if (!string.IsNullOrEmpty(row[0].ToString()))//&& flag
        //            {
        //                var partObj = GoodsService.GetGoodsByStorage(shopid, unionid, storageid, row[0].ToString());
        //                if (partObj.Count == 0)
        //                {
        //                    for (int j = 0; j < pdList.Count; j++)
        //                    {
        //                        if (pdList[j]["GoodsID"].ToString() == partObj[0]["ID"].ToString())
        //                        {
        //                            pdList[j]["IsError"] = "<span style='color:red'>错误</span>";
        //                            pdList[j]["Msg"] = "<span style='color:red'>Excel表格商品编码重复</span>";
        //                            pdList[j]["Error"] = false;
        //                            flag = false;
        //                        }
        //                    }
        //                    pdInfo["GoodsID"] = Guid.NewGuid().ToString();
        //                    pdInfo["GoodsCode"] = row[0].ToString();
        //                    pdInfo["GoodsName"] = row[1].ToString();
        //                    pdInfo["Unit"] = row[2].ToString();
        //                    pdInfo["InitInventory"] = row[3].ToString();
        //                    pdInfo["StorageName"] = row[4].ToString();
        //                    pdInfo["InitCostPrice"] = row[5].ToString();
        //                    pdInfo["SalePrice"] = row[6].ToString();
        //                    pdInfo["SafeQty"] = row[7].ToString();
        //                    pdInfo["Brand"] = row[8].ToString();
        //                    pdInfo["Spec"] = row[9].ToString();
        //                    pdInfo["MatchPlateNumber"] = row[10].ToString();
        //                    pdInfo["Origin"] = row[11].ToString();
        //                    pdInfo["Location"] = row[12].ToString();
        //                    pdInfo["CategoryName"] = row[13].ToString();

        //                    if (flag)
        //                    {
        //                        pdInfo["IsError"] = "<span style='color:Green;'>正确</span>";
        //                        pdInfo["Msg"] = null;
        //                        pdInfo["Error"] = true;
        //                    }
        //                    else
        //                    {
        //                        dic.Add(pdInfo);
        //                        pdInfo["IsError"] = "<span style='color:red'>错误</span>";
        //                        pdInfo["Msg"] = "<span style='color:red'>Excel表格商品编码重复</span>";
        //                        pdInfo["Error"] = false;
        //                    }
        //                }
        //                else
        //                {
        //                    dic.Add(pdInfo);
        //                    pdInfo["IsError"] = "<span style='color:red'>错误</span>";
        //                    pdInfo["Msg"] = "<span style='color:red'>商品编码在系统中已存在</span>";
        //                    pdInfo["Error"] = false;
        //                }
        //            }
        //            else
        //            {
        //                dic.Add(pdInfo);
        //                pdInfo["IsError"] = "<span style='color:red'>错误</span>";
        //                pdInfo["Msg"] = "<span style='color:red'>" + Msg + "</span>";
        //                pdInfo["Error"] = false;
        //            }
        //            pdList.Add(pdInfo);
        //        }
        //    }
        //    catch (Exception e)
        //    {
        //        ErrorStr = "模板错误，请在本页面重新下载模板后再导入 ლ(°◕‵ƹ′◕ლ)" + "</br>" + e.StackTrace;
        //    }

        //    return Json(new { Data = pdList, Error = dic, SumNum = SumInt, OkNum = SumInt - dic.Count, ErrorMessage = ErrorStr });
        //}
        //#endregion
    }
}
